package com.wx.aop;
import com.wx.pojo.Setmeal;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

/**
 * 用来监控套餐类的增删改
 * 在套餐修改以后自动生成相应的html页面
 */
@Component
@Aspect
public class HtmlTemplateCreatedAop {
    @Autowired
    private ServiceDependecyInsert sdi;
    @Value("${outPutPath}")
    private String outPutPath;
    @Value("${templatePath}")
    private String templatePath;
    // 配置切入点
    /**
     * 监控所有使用了@FitnessAnnotation注解的方法
     */
    @Pointcut("@annotation(com.wx.annotation.FitnessAnnotation)")
//    @Pointcut("execution(public void com.wx.test.AnnotationTest.test(..))")
    public void pc(){}
    //使用通知对指定的切入点进行切入
    @AfterReturning("pc()")
    public void createHtmlUseTemplateByFreemarker() throws IOException, TemplateException {
        System.out.println("开始创建模板");
        // 加载模板需要的资源,加载所有的套餐列表
        List<Setmeal> setmeals = sdi.getService().findAllCheckitems();
        HashMap<String, List> map = new HashMap<>();
        map.put("setmealList",setmeals);
        // 创建套餐html
        createSetmealHtml(map);
        // 加载一个套餐对应的检擦组信息
        ArrayList list = new ArrayList();
        for (Setmeal s : setmeals) {
            list.add(s);
        }
        // 生成套餐详细信息界面
        creatSetmealdatailHtml(list);
        System.out.println("创建完毕");

    }

    /**
     * 生成套餐列表html
     * @throws IOException
     * @throws TemplateException
     */
    public void createSetmealHtml(Map map) throws IOException, TemplateException {

        //加载配置文件
        Configuration cfg = new Configuration(Configuration.getVersion());
        // 指定模板文件所在位置
        cfg.setDirectoryForTemplateLoading(new File(templatePath));
        // 设置字符集
        cfg.setDefaultEncoding("utf-8");
        // 加载模板
        Template template = cfg.getTemplate("mobile-setmeal.ftl");
        // 加载模板需要的资源,加载所有的套餐列表
        // 输出模板
        FileWriter fileWriter = new FileWriter(new File(outPutPath+"/mobile-setmeal.html"));
        template.process(map,fileWriter);
        // 关闭资源
        fileWriter.close();

    }
    /**
     * 生成套餐详细信息html文件
     */
    public void creatSetmealdatailHtml(List<Setmeal> list) throws IOException, TemplateException {



        //加载配置文件
        Configuration cfg = new Configuration(Configuration.getVersion());
        // 设置模板文件所有的目录

        // 指定模板文件所在位置
        cfg.setDirectoryForTemplateLoading(new File(templatePath));
        // 设置字符集
        cfg.setDefaultEncoding("utf-8");
        // 加载套餐详细信息模板
        Template template = cfg.getTemplate("moba-setmeal-detail.ftl");
        //加载资源
        for (Setmeal s : list) {
            FileWriter writer = new FileWriter(new File(outPutPath + "/"+s.getId() + ".html"));
            HashMap<Object, Object> map = new HashMap<>();
            map.put("setmeal",s);
            // 生成文件
            template.process(map,writer);
            // 关闭文件流
            writer.close();
        }
    }
}
